package fr.bordeaux1.planingdesetudiants.controler.db;

import java.sql.SQLException;
import java.util.List;

import fr.bordeaux1.planingdesetudiants.model.AccumulateurErreur;
import fr.bordeaux1.planingdesetudiants.model.Cours;
import fr.bordeaux1.planingdesetudiants.model.Enseignant;
import fr.bordeaux1.planingdesetudiants.model.Etudiant;
import fr.bordeaux1.planingdesetudiants.model.Groupe;
import fr.bordeaux1.planingdesetudiants.model.Ue;

public interface IDBPlaningDesEtudiants {

	// cours
	/**
	 * Le cours passé en paramètre sera modifié avec l'id créé
	 * @param cours
	 * @throws SQLException
	 */
	public void ajouterCours(Cours cours) throws SQLException;
	public void modifierCours(Cours cours) throws SQLException;
	public void modifierCreneauCours(int idCours, int creneau) throws SQLException;
	public void supprimerCours(Cours cours) throws SQLException;
	public List<Cours> listerCours() throws SQLException;

	// enseignants
	public void ajouterEnseignant(Enseignant enseignant) throws SQLException;
	public void modifierEnseignant(Enseignant enseignant) throws SQLException;
	public void supprimerEnseignant(Enseignant enseignant) throws SQLException;
	public List<Enseignant> listerEnseignant() throws SQLException;

	// etudiants
	public void ajouterEtudiant(Etudiant etudiant) throws SQLException;
	public void ajouterEtudiantSiInexistant(Etudiant etudiant) throws SQLException;
	public List<Etudiant> listerEtudiants() throws SQLException;
	public void supprimerEtudiant(Etudiant etu) throws SQLException;

	// groupes
	public void ajouterGroupe(Groupe groupe) throws SQLException;
	public void supprimerGroupe(Groupe groupe) throws SQLException;
	public List<Groupe> listerGroupes() throws SQLException;
	public List<Groupe> listerGroupeDeUe(Ue ue)throws SQLException;

	// UEs
	public void ajouterUe(Ue ue) throws SQLException;
	public List<Ue> listerUes() throws SQLException;
	public Ue chargerUe(String codeUe) throws SQLException;

	//cours_groupes
	public void ajouterGroupeAuCours(Groupe groupe, Cours cours) throws SQLException;
	public void retirerGroupeDeCours(Groupe groupe, Cours cours) throws SQLException;
	public List<Groupe> listerGroupesDeCours(Cours cours) throws SQLException;
	public List<Cours> listerCoursDeGroupe(Groupe groupe) throws SQLException;
	
	//groupes_etudiants
	public void ajouterEtudiantAuGroupe(Etudiant etudiant, Groupe groupe) throws SQLException;
	public void retirerEtudiantDeGroupe(Etudiant etudiant, Groupe groupe) throws SQLException;
	public List<Etudiant> listerEtudiantsDeGroupe(Groupe groupe) throws SQLException;
	public List<Groupe> listerGroupesEtudiant(Etudiant etudiant) throws SQLException;
	
	//ues_etudiants
	public void ajouterEtudiantAUe(Ue ue, Etudiant etudiant) throws SQLException;
	public void retirerEtudiantUe(Ue eu, Etudiant etu) throws SQLException;
	public List<Ue> listerUesEtudiant(Etudiant etu) throws SQLException;
	public List<Etudiant> listerEtudiantsUe(Ue ue) throws SQLException;
	public List<Etudiant> listerEtudiantsSansGroupeUe(Ue ue) throws SQLException;
	
	//gestion des transaction
	public void beginTransaction() throws SQLException;
	public void endTransaction() throws SQLException;
	public void close() throws SQLException;

	public Enseignant enseignantDeCours(Cours cours) throws SQLException;
	public List<Cours> listerCoursEnseignant(Enseignant enseignant) throws SQLException;
	
	//vérification des erreurs
	public AccumulateurErreur rechercherErreurs() throws SQLException;
	
}